﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using Bastanteo.Negocio;
using Bastanteo.Persistencia.ADO;
using Bastanteo.Domain; 

namespace Bastanteo.Persistencia.ADO
{
    public class GrupoDAO : IGrupoDAO
    {


        #region IbaseDao<Grupo,int> Members

        public Domain.Grupo Crear(Domain.Grupo entidad)
        {
            using (SqlConnection cn = new SqlConnection(Conexion.ObtenerCadena()))
            {
                cn.Open();
                SqlCommand cmd = new SqlCommand("insert into Grupo values (@GrupoID, @GrupoDescripcion)", cn);
                cmd.Parameters.AddWithValue("@GrupoID", entidad.GrupoId);
                cmd.Parameters.AddWithValue("@GrupoDescripcion", entidad.GrupoDescripcion);
                cmd.ExecuteNonQuery();

            }

            return Obtener(entidad.GrupoId); 
        }

        public Domain.Grupo Obtener(int id)
        {
            Grupo o = null;
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena()))
            {
                con.Open();
                string sql = "select * from Grupo where GrupoId=@id";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.AddWithValue("@id", id);
                    SqlDataReader r = com.ExecuteReader();
                    if (r.Read())
                    {
                        o = new Grupo();
                        o.GrupoId = (int)r["GrupoId"];
                        o.GrupoDescripcion = (string)r["GrupoDescripcion"];
                    

                    }
                }
            }
            return o;
        }

        public Domain.Grupo Modificar(Domain.Grupo entidad)
        {
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena()))
            {
                con.Open();
                string sql = "update Grupo set  GrupoDescripcion=@GrupoDescripcion where GrupoID=@GrupoID";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.AddWithValue("@GrupoID", entidad.GrupoId);
                    com.Parameters.AddWithValue("@GrupoDescripcion", entidad.GrupoDescripcion);
           
                    com.ExecuteNonQuery();
                }
            }
            return Obtener(entidad.GrupoId);
        }

        public void Eliminar(Domain.Grupo entidad)
        {
            using (SqlConnection con = new SqlConnection(Conexion.ObtenerCadena()))
            {
                con.Open();
                string sql = "delete from Grupo where GrupoId=@id";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.AddWithValue("@id", entidad.GrupoId);
                    com.ExecuteNonQuery();
                }
            }
        }

        //Metodos Listar
        public ICollection<Grupo> Listar()
        {
            string _Sentencia = "SELECT GrupoID, GrupoDescripcion FROM Grupo";
            ICollection<Grupo> grupoEncontrados = new List<Grupo>();
            Grupo grupoEncontrado = null;
            using (SqlConnection _Conexion = new SqlConnection(Conexion.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        while (_Resultado.Read())
                        {
                            grupoEncontrado = new Grupo();
                            grupoEncontrado.GrupoId = _Resultado.GetInt32(0);
                            grupoEncontrado.GrupoDescripcion = (String)_Resultado["GrupoDescripcion"];
                            grupoEncontrados.Add(grupoEncontrado);
                        }
                    }
                }
            }
            return grupoEncontrados;
        }

        public ICollection<Grupo> ListarXNombre(string nombre)
        {
            string _Sentencia = "SELECT GrupoID, GrupoDescripcion FROM Grupo WHERE GrupoDescripcion LIKE '%'+@nombre+'%'";
            ICollection<Grupo> grupoEncontrados = new List<Grupo>();
            Grupo grupoEncontrado = null;
            using (SqlConnection _Conexion = new SqlConnection(Conexion.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@nombre", nombre));
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        while (_Resultado.Read())
                        {
                            grupoEncontrado = new Grupo();
                            grupoEncontrado.GrupoId = _Resultado.GetInt32(0);
                            grupoEncontrado.GrupoDescripcion = (String)_Resultado["GrupoDescripcion"];
                            grupoEncontrados.Add(grupoEncontrado);
                        }
                    }
                }
            }
            return grupoEncontrados;
        }

        // Métodos de soporte
        private int GenerarNuevoCodigo()
        {
            string _Sentencia = "SELECT max(GrupoID) FROM Grupo";
            int _NuevoCodigo = 0;
            using (SqlConnection _Conexion = new SqlConnection(Conexion.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    object _Resultado = _Comando.ExecuteScalar();
                    if (DBNull.Value.Equals(_Resultado)) // No hay datos en la tabla
                        _NuevoCodigo = 1;
                    else
                        _NuevoCodigo = (int)_Resultado + 1;
                }
            }
            return _NuevoCodigo;
        }

        #endregion
    }
}